package nix.bs.domain;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class Cart {

	private Map<String, CartItem> map = new LinkedHashMap<String, CartItem>();

	/**
	 * 添加条目
	 */
	public void add(CartItem cartItem) {
		if (this.map.containsKey(cartItem.getBook().getBid())) {
			// 条目存在，累加数量
			CartItem _cartItem = map.get(cartItem.getBook().getBid());
			_cartItem.setCount(_cartItem.getCount() + cartItem.getCount());
			this.map.put(cartItem.getBook().getBid(), _cartItem);
		} else {
			this.map.put(cartItem.getBook().getBid(), cartItem);
		}
	}

	/**
	 * 清空购物车
	 */
	public void clear() {
		this.map.clear();
	}

	/**
	 * 删除条目
	 */
	public void delete(String bid) {
		this.map.remove(bid);
	}

	/**
	 * 获得所有条目
	 */
	public Collection<CartItem> getCartItems() {
		return this.map.values();
	}

	/**
	 * 获得合计（使用BigDecimal避免二进制运算误差问题，使用字符串的构造函数）
	 */
	public double getTotal() {
		BigDecimal total = new BigDecimal("0");
		for (CartItem cartItem : this.map.values()) {
			BigDecimal subTotal = new BigDecimal(cartItem.getSubTotal() + "");
			total = total.add(subTotal);
		}
		return total.doubleValue();
	}
}
